# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import pickle
from datetime import datetime as dt
from series_to_supervised import series_to_supervised
from sklearn.preprocessing import StandardScaler

def standardize_dataset():
    '''
    对数据进行标准化
    '''
    # 对 1997-1998 年的数据进行标准化
    data_day = pd.read_excel(r'../附件/处理后的数据/天负荷数据.xlsx', index_col=0)
    
    # 对负荷进行标准化
    load = data_day['energy_load'].values.reshape((-1,1))
    load_scaler = StandardScaler()
    load_after = load_scaler.fit_transform(load)
    # 对温度进行标准化
    
    temperature = data_day['Temperature [oC]'].values.reshape((-1,1))
    temperature_scaler = StandardScaler()
    temperature_after = temperature_scaler.fit_transform(temperature)
    
    # 能量数据进行标准化
    data_day.drop('energy_load', axis=1, inplace=True)
    data_day['energy_load'] = load_after.reshape(-1)
    data_day.drop('Temperature [oC]', axis=1, inplace=True)
    data_day['temperature'] = load_after.reshape(-1)
    data_day.to_excel(r'../附件/中间数据/天负荷数据_标准化_1997_1998.xlsx', index=False)

    pickle.dump(load_scaler, open(r'../附件/中间数据/load_scaler.pkl', 'wb'))
    
    # 对 1999 年的数据进行标准化，注意，用 1997-1998 年的均值和标准差来标准化数据
    data_day_1999 = pd.read_excel(r'../附件/处理后的数据/天负荷数据_1999.xlsx', index_col=0)
    
    # 对负荷进行标准化
    load = data_day_1999['energy_load'].values.reshape((-1,1))
    load_after = load_scaler.transform(load)
    # 对温度进行标准化
    
    temperature = data_day_1999['Temperature [oC]'].values.reshape((-1,1))
    temperature_after = temperature_scaler.transform(temperature)
    
    # 能量数据进行标准化
    data_day_1999.drop('energy_load', axis=1, inplace=True)
    data_day_1999['energy_load'] = load_after.reshape(-1)
    data_day_1999.drop('Temperature [oC]', axis=1, inplace=True)
    data_day_1999['temperature'] = load_after.reshape(-1)
    data_day_1999.to_excel(r'../附件/中间数据/天负荷数据_标准化_1999.xlsx', index=False)
    
    return data_day, data_day_1999
    
if __name__ == '__main__':
    
    data_day, data_day_1999 = standardize_dataset()
    
    # 窗口长度为 6 的滑动窗口法处理数据，并将最后一列数据作为输出，其余作为输入
    data_load = data_day['energy_load']
    data_day.drop('energy_load', axis=1, inplace=True)
    data_load_lag = series_to_supervised(data_load, n_in=5, 
                                        n_out=1, dropnan=False)
                                        
    # 窗口长度为 6 的滑动窗口法处理数据，并将最后一列数据作为输出，其余作为输入
    data = pd.concat([data_day, data_load_lag], axis=1)
    # 删除日期列
    data.drop(data.columns[0], axis=1, inplace=True)
    data.to_excel(r'../附件/中间数据/天负荷数据_1997_1998_ml.xlsx', index=False)

    # 同理处理 1999 年 1 月的数据：
    # 窗口长度为 6 的滑动窗口法处理数据，并将最后一列数据作为输出，其余作为输入
    data_load = data_day_1999['energy_load']
    data_day_1999.drop('energy_load', axis=1, inplace=True)
    data_load_lag = series_to_supervised(data_load, n_in=5, 
                                        n_out=1, dropnan=False)
                                        
    # 窗口长度为 6 的滑动窗口法处理数据，并将最后一列数据作为输出，其余作为输入
    data = pd.concat([data_day_1999, data_load_lag], axis=1)
    # 删除日期列
    data.drop(data.columns[0], axis=1, inplace=True)
    data.to_excel(r'../附件/中间数据/天负荷数据_1999_ml.xlsx', index=False)
